import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 操作系统页面置换算法
 * LRU 最近最久未使用置换算法，通过 LinkedHashMap 内部 removeEldestEntry 方法实现
 */
public class LRUCache1 {

    private Map<Integer, Integer> map;
    private int capacity;

    /**
     * 初始化构造函数
     * @param capacity 容量
     */
    public LRUCache1(int capacity) {
        this.capacity = capacity;
        map = new LinkedHashMap<Integer, Integer>(capacity, 0.75f, true) {
            @Override
            protected boolean removeEldestEntry(Map.Entry eldest) {
                return size() > capacity; // 容量大于 capacity 时就删除
            }
        };
    }

    /**
     * 返回 key 对应的 value 值，若不存在，返回 -1
     * @param key key 值
     * @return value 值
     */
    public int get(int key) {
        return map.getOrDefault(key, -1);
    }

    /**
     * 往 map 表中存入数据
     * @param key 存入的 key 值
     * @param value 存入的 value 值
     */
    public void put(int key, int value) {
        map.put(key, value);
    }
}
